package com.cskaoyan.javase.oop1._15import._0one;

import com.cskaoyan.javase.oop1._15import._1another.Teacher;

/**
 * 测试类
 * 当使用简单类名创建对象时,由于同包下不存在同名类
 * 所以该类在同包下,要么就存在,要么就不存在
 *
 * 但是如果使用简单类名,直接创建不同包下的该类对象
 * 这可能吗?
 * 这是不可能的,不同包下完全可能出现同名类,简单类名是无法精准定位某个类
 *
 * 所以编译器在查找并决定使用某个class时,原则是:
 * 使用简单类名时,优先从同包下查找该类,有就不报错,否则就报错
 *
 * 如果想要使用简单类名,访问不同包下的类,就需要使用"导包"功能
 * 导包使用import关键字,目的在于,指出这个简单类名的所属包,定位这个类.
 * 语法:
 *      import + 全限定类名;
 * 关于import关键字的使用:
 *      1.import导包语句应该放在package声明之后，有效代码之前。
 * 正常情况下，我们使用某个类时，IDEA会自动导包，不用太关心这条语句的位置。
 * 一般只需要注意不要用IDEA导错包就可以了。
 *      2.导包的目的是为了在该类中使用不同包下的某个类
 *          同包下是不需要导包的
 *      3.像String、System、Math等常用类很明显不是同包下的类，但我们并没有进行导包操作。
 *      这是因为在Java当中的，"java.lang包"是Java的核心类包，具有隐式的导包。
 * 注意"java.lang包"下的所有类，是隐式的导入了每个Java类，而不是没有导入！
 *
 *
 * @since 17:04
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Test {
    public static void main(String[] args) {
        /*
            需求: 在该main方法中
            同时访问one包和another包下的同名Student
            既然能够用简单类名创建对象,那么当然也可以用全限定类名创建对象
            用全限定类名创建对象,就无须导包操作
            所以,以上需求,可以:
                a.同包下的,可以直接new,直接创建同包下的Student对象
                b.不同包下的,要用全限定类名创建对象
         */
        Student s = new Student();
        s.test();

        // System.out.println(Math.PI);
        com.cskaoyan.javase.oop1._15import._1another.Student s2 = new com.cskaoyan.javase.oop1._15import._1another.Student();
        s2.test();
    }

    public static void test(){
        new Teacher();
    }
}
